From 8419b51cc3894dfb6948ecd06e4782392d29bc24 Mon Sep 17 00:00:00 2001 From: Jason Gerecke Date: Fri, 23 Jun 2017 11:17:53 -0700 Subject: [PATCH] wayland: Get implicit grab serial information from tablet devices If a tablet device is used to perform actions like window moving or resizing, GTK must provide the correct implicit grab serial number over Wayland to Mutter in order for the action to succeed. This commit adds tablet support to the implicit serial getters. https://bugzilla.gnome.org/show_bug.cgi?id=777333 --- gdk/wayland/gdkdevice-wayland.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c index f46952dde4..780906b7d2 100644 --- a/gdk/wayland/gdkdevice-wayland.c +++ b/gdk/wayland/gdkdevice-wayland.c @@ -5050,9 +5050,25 @@ _gdk_wayland_device_get_implicit_grab_serial (GdkWaylandDevice *device, if (sequence) touch = gdk_wayland_seat_get_touch (GDK_WAYLAND_SEAT (seat), GDK_EVENT_SEQUENCE_TO_SLOT (sequence)); + if (touch) return touch->touch_down_serial; - else + + if (event) + { + GdkDevice *source = gdk_event_get_source_device (event); + GdkWaylandSeat *wayland_seat = GDK_WAYLAND_SEAT (seat); + GList *l; + + for (l = wayland_seat->tablets; l; l = l->next) + { + GdkWaylandTabletData *tablet = l->data; + + if (tablet->current_device == source) + return tablet->pointer_info.press_serial; + } + } + return GDK_WAYLAND_SEAT (seat)->pointer_info.press_serial; } @@ -5063,6 +5079,7 @@ _gdk_wayland_seat_get_last_implicit_grab_serial (GdkSeat *seat, GdkWaylandSeat *wayland_seat; GdkWaylandTouchData *touch; GHashTableIter iter; + GList *l; uint32_t serial; wayland_seat = GDK_WAYLAND_SEAT (seat); @@ -5076,6 +5093,14 @@ _gdk_wayland_seat_get_last_implicit_grab_serial (GdkSeat *seat, if (wayland_seat->pointer_info.press_serial > serial) serial = wayland_seat->pointer_info.press_serial; + for (l = wayland_seat->tablets; l; l = l->next) + { + GdkWaylandTabletData *tablet = l->data; + + if (tablet->pointer_info.press_serial > serial) + serial = tablet->pointer_info.press_serial; + } + while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &touch)) { if (touch->touch_down_serial > serial) -- 2.30.2